package main

import (
	"errors"
	"fmt"
	"gorm.io/gorm"
)

func main() {
	DB.Config.Logger = mysqlLogger
	//纯手动
	//DB.Begin()
	//DB.Rollback()
	//DB.Commit()

	//结论：除非返回error，否则不会回滚，哪怕有mysql的错误 - 比如下面的888会超出范围，虽然报错但是跳过了，继续执行后面的
	//so，如果要回滚，需要返回error。
	//Transaction start a transaction as a block, return error will rollback, otherwise to commit.
	DB.Transaction(func(tx *gorm.DB) error {
		//注意，内部只能用tx执行，否则无效
		tx.Create(&Student{Age: 888})
		fmt.Println("--------")
		tx.Create(&Student{Age: 111})
		fmt.Println("--------")

		s := Student{}
		tx.Last(&s)
		fmt.Println("--------", s)
		s.Age++ //注意，不能修改ID，或者不能改成不存在的ID，会导致额外新增一条
		tx.Save(s)
		//UPDATE `t_student` SET `id`=20,`name`='',`age`=111,`email`=NULL,`birthday`='2024-07-02 11:03:16' WHERE `id` = 20
		fmt.Println("--------")
		return errors.New("test err")
	})
}
